<?php

class ProductController extends Controller {
    public function actionIndex() {
        if (!isset($_GET['product_id'])) throw new CHttpException(999, 'Invalid request');
        $id = $_GET['product_id'];
        $product = Product::model()->findByPk($id);
        $product->views++;
        $product->save();

        if ($product == null) throw new CHttpException(999, 'Invalid request');
        $category = Category::model()->findByPk($product->cat_id);
        if ($category == null) throw new CHttpException(999, 'Invalid request');
        $parent = Category::model()->findByPk($category->parent_id);

        $related_products = Product::model()->findAll(array(
            'select' => 'product_id, product_name ',
            'condition' => 'cat_id = :cat_id and (published  = 1 or status = 1)  and product_id != :id',
            'order' => 'product_id DESC',
            'limit' => 15,
            'params' => array(':cat_id' => $product->cat_id, ':id' => $id)
        ));
        $product->detail = strip_tags($product->detail, '<div><p><br><span><img><b><i><u><strong><em><h1><h2><h3><h4><h5><h6><center><table><tr><td><th>');

        $meta_desc = TreTodayCommon::getShortContent(strip_tags($product->description), 150);
        if ($meta_desc == '') $meta_desc = TreTodayCommon::getShortContent(strip_tags($product->detail), 150);
        if ($meta_desc == '') $meta_desc = Yii::app()->params['meta_description'];

        #region SEO
        Yii::app()->clientScript->registerLinkTag('canonical', null, TreTodayCommon::getCurrentUrl());
        Yii::app()->clientScript->registerMetaTag($meta_desc, 'description');
        Yii::app()->clientScript->registerMetaTag(Yii::app()->params['meta_keywords'], 'keywords');
        $this->pageTitle = 'Rao vặt hot | ' . $product->product_name;
        #endregion SEO

        #region user interested
        $interested = UserInterested::model()->findByAttributes(array('user_ip' => TreTodayCommon::getUserIp(), 'category_id' => $product->cat_id));
        if ($interested == null) {
            $interested = new UserInterested();
            $interested->category_id = $product->cat_id;
            $interested->priority = 1;
            $interested->user_id = Yii::app()->user->id;
            $interested->user_ip = TreTodayCommon::getUserIp();
            $interested->save();
        } else {
            $interested->priority++;
            $interested->save();
        }
        #endregion

        $this->render('index', array('model' => $product, 'parent' => $parent, 'category' => $category, 'related_products' => $related_products));
    }

    public function actionUp() {

        $model = new Product;

        $session = Yii::app()->session['up_product'];
        if ($session != null) {
            $model->product_name = isset($session['product_name']) ? $session['product_name'] : '';
            $model->cat_id = isset($session['cat_id']) ? $session['cat_id'] : '';
            $model->description = isset($session['description']) ? $session['description'] : '';
            $model->price = isset($session['price']) ? $session['price'] : '';
            $model->currency = isset($session['currency']) ? $session['currency'] : '';
            $model->location = isset($session['location']) ? $session['location'] : '';
            $model->buy_method_id = isset($session['buy_method_id']) ? $session['buy_method_id'] : '';
            $model->detail = isset($session['detail']) ? $session['detail'] : '';
            $model->nick_ym = isset($session['nick_ym']) ? $session['nick_ym'] : '';
            $model->nick_skype = isset($session['nick_skype']) ? $session['nick_skype'] : '';
            $model->website = isset($session['website']) ? $session['website'] : '';
        }

        $categories = Category::model()->findAll(array(
            'select' => 'cat_id, cat_name',
            'condition' => 'parent_id > 0',
        ));
        $methods = BuyMethod::model()->findAll();
        $locations = TreTodayCommon::getArrayCityOfVietNam();

        if (isset($_POST['Product'])) {
            $session['product_name'] = $_POST['Product']['product_name'];
            $session['cat_id'] = $_POST['Product']['cat_id'];
            $session['description'] = $_POST['Product']['description'];
            $session['price'] = $_POST['Product']['price'];
            $session['currency'] = $_POST['Product']['currency'];
            $session['location'] = $_POST['Product']['location'];
            $session['buy_method'] = $_POST['Product']['buy_method_id'];
            $session['detail'] = $_POST['Product']['detail'];
            $session['nick_ym'] = $_POST['Product']['nick_ym'];
            $session['nick_skype'] = $_POST['Product']['nick_skype'];
            $session['website'] = $_POST['Product']['website'];
            Yii::app()->session->add('up_product', $session);

            if (Yii::app()->user->isGuest)
                $this->redirect(TreTodayUrl::getRegisterUrl());

            $user = UserBack::model()->findByPk(Yii::app()->user->id);
            if ($user == null) $this->redirect(TreTodayUrl::getRegisterUrl());
            if (!$user->status) {
                Yii::app()->user->setFlash('success', "Tài khoản của bạn chưa được kích hoạt. Vui lòng kiểm tra hộp thư để kích hoạt tài khoản.");
                $this->redirect(TreTodayUrl::getUpProductUrl());
            }

            $model->attributes = $_POST['Product'];
            $model->product_code = TreTodayCommon::getSEO($model->product_name);
            $model->nick_ym = $_POST['Product']['nick_ym'];
            $model->nick_skype = $_POST['Product']['nick_skype'];
            $model->website = $_POST['Product']['website'];

            $model->tieubieu = 0;
            $model->published = 0;
            $model->banchay = 0;

            $category = Category::model()->findByPk($model->cat_id);
            $model->cat_code = $category == null ? "" : TreTodayCommon::getSEO($category->cat_name);
            $model->views = 1;
            $model->add_time = time();
            $model->modify_time = time();
            if (Yii::app()->user == null || Yii::app()->user->id == 0) {
                $model->user_id = 0;
                $model->user_name = '';
            } else {
                $user = UserBack::model()->findByPk(Yii::app()->user->id);
                $model->user_id = Yii::app()->user->id;
                $model->user_name = $user->user_name;
            }

            //handle image
            $file = CUploadedFile::getInstance($model, 'image');
            if ($file != null) {
                $imageVariables = getimagesize($file->tempName);
                $extension = $file->extensionName;
                if ($extension == 'jpg' || $extension == 'jpeg') {
                    $file = EUploadedImage::getInstance($model, 'image');
                    $arr_size = TreTodayCommon::getResizeImage($imageVariables[0], $imageVariables[1]);
                    $file->maxWidth = $arr_size['width'];
                    $file->maxHeight = $arr_size['height'];
                    $rnd = rand(0, 999999);
                    $fileName = "{$rnd}.jpg";
                    $base = TreTodayCommon::createFolder('products');
                    $base = $base . '/' . $fileName;
                    if ($file->saveAs($base)) {
                        $img = new Image();
                        $img->image_path = TreTodayCommon::generateImagePath('products', $fileName);
                        $img->save();
                        $model->image_id = $img->image_id;

                        $code = md5(time() + rand(0, 999999));
                        $model->status = 0;
                        $model->activation_code = $code;

                        if ($model->save()) {
                            $this->sendEmail($model);
                            Yii::app()->user->setFlash('success', "Rao vặt của bạn đã được lưu lại và đang chờ kiểm duyệt.Trong lúc chờ được kiểm duyệt, bạn có thể kích hoạt sản phẩm để được hiển thị, mail kích hoạt đã được gửi vào hộp thư của bạn.");
                            unset(Yii::app()->session['up_product']);
                            $this->redirect(TreTodayUrl::home());
                        }
                    }

                } else {
                    $model->addError('image_id', 'Chỉ hỗ trợ file jpg hoặc jpeg');
                }
            } else {
                $model->image_id = 0;

                $code = md5(time() + rand(0, 999999));
                $model->status = 0;
                $model->activation_code = $code;

                if ($model->save()) {
                    $this->sendEmail($model);

                    Yii::app()->user->setFlash('success', "Rao vặt của bạn đã được lưu lại và đang chờ kiểm duyệt.Trong lúc chờ được kiểm duyệt, bạn có thể kích hoạt sản phẩm để được hiển thị, mail kích hoạt đã được gửi vào hộp thư của bạn.");
                    unset(Yii::app()->session['up_product']);
                    $this->redirect(TreTodayUrl::home());
                }
            }
        }

        #region SEO
        Yii::app()->clientScript->registerLinkTag('canonical', null, TreTodayCommon::getCurrentUrl());
        Yii::app()->clientScript->registerMetaTag('Rao vặt hot, tạo rao vặt miễn phí, nhanh chóng', 'description');
        Yii::app()->clientScript->registerMetaTag(Yii::app()->params['meta_keywords'], 'keywords');
        $this->pageTitle = 'Rao vặt hot | Tạo rao vặt';
        #endregion SEO

        $this->render('up', array(
            'model' => $model,
            'categories' => $categories,
            'methods' => $methods,
            'locations' => $locations,
            'user_id' => Yii::app()->user->id
        ));

    }

    public function beforeaction() {
        if (!isset(Yii::app()->request->cookies['rvhlayout'])) {
            $cookie = new  CHttpCookie('layout', '//layouts/main');
            $cookie->expire = time() + 60 * 60 * 24 * 10; //10 days
            Yii::app()->request->cookies['rvhlayout'] = $cookie;
        }
        $cookie = Yii::app()->request->cookies['rvhlayout'];
        $this->layout = $cookie->value;
        return true;
    }

    public function actionUpdate() {
        if (!isset($_GET['product_id'])) throw new CHttpException(999, 'Invalid request');
        $id = $_GET['product_id'];
        $model = Product::model()->findByPk($id);
        if ($model == null) throw new CHttpException(999, 'Invalid request');
        if ($model->user_id != Yii::app()->user->id) throw new CHttpException(999, 'Invalid request');

        $categories = Category::model()->findAll(array(
            'select' => 'cat_id, cat_name',
            'condition' => 'parent_id > 0',
        ));
        $methods = BuyMethod::model()->findAll();
        $locations = TreTodayCommon::getArrayCityOfVietNam();

        if (isset($_POST['Product'])) {
            $model->attributes = $_POST['Product'];
            $model->product_code = TreTodayCommon::getSEO($model->product_name);
            $model->nick_ym = $_POST['Product']['nick_ym'];
            $model->nick_skype = $_POST['Product']['nick_skype'];
            $model->website = $_POST['Product']['website'];

            $model->tieubieu = 0;
            $model->published = 0;
            $model->banchay = 0;

            $category = Category::model()->findByPk($model->cat_id);
            $model->cat_code = $category == null ? "" : TreTodayCommon::getSEO($category->cat_name);
            $model->add_time = time();
            $model->modify_time = time();
            if (Yii::app()->user == null || Yii::app()->user->id == 0) {
                $model->user_id = 0;
                $model->user_name = '';
            } else {
                $user = UserBack::model()->findByPk(Yii::app()->user->id);
                $model->user_id = Yii::app()->user->id;
                $model->user_name = $user->user_name;
            }

            //handle image
            $file = CUploadedFile::getInstance($model, 'image');
            if ($file != null) {
                $imageVariables = getimagesize($file->tempName);
                $extension = $file->extensionName;
                if ($extension == 'jpg' || $extension == 'jpeg') {
                    $file = EUploadedImage::getInstance($model, 'image');
                    $arr_size = TreTodayCommon::getResizeImage($imageVariables[0], $imageVariables[1]);
                    $file->maxWidth = $arr_size['width'];
                    $file->maxHeight = $arr_size['height'];
                    $rnd = rand(0, 999999);
                    $fileName = "{$rnd}.jpg";
                    $base = TreTodayCommon::createFolder('products');
                    $base = $base . '/' . $fileName;
                    if ($file->saveAs($base)) {
                        $img = new Image();
                        $img->image_path = TreTodayCommon::generateImagePath('products', $fileName);
                        $img->save();

                        $model->image_id = $img->image_id;
                        $model->published = 0;
                        $code = md5(time() + rand(0, 999999));
                        $model->status = 0;
                        $model->activation_code = $code;
                        if ($model->save()) {
                            $this->sendEmail($model);
                            Yii::app()->user->setFlash('success', "Rao vặt của bạn đã được cập nhật và đang chờ kiểm duyệt.Trong lúc chờ được kiểm duyệt, bạn có thể kích hoạt sản phẩm để được hiển thị, mail kích hoạt đã được gửi vào hộp thư của bạn.
");
                            $this->redirect(TreTodayUrl::home());
                        }
                    }
                } else {
                    $model->addError('image_id', 'Chỉ hỗ trợ file jpg hoặc jpeg');
                }

            } else {
                $model->published = 0;
                $code = md5(time() + rand(0, 999999));
                $model->status = 0;
                $model->activation_code = $code;
                if ($model->save()) {
                    $this->sendEmail($model);
                    Yii::app()->user->setFlash('success', "Rao vặt của bạn đã được cập nhật và đang chờ kiểm duyệt.Trong lúc chờ được kiểm duyệt, bạn có thể kích hoạt sản phẩm để được hiển thị, mail kích hoạt đã được gửi vào hộp thư của bạn.");
                    $this->redirect(TreTodayUrl::home());
                }
            }
        }

        $meta_desc = TreTodayCommon::getShortContent(strip_tags($model->description), 150);
        if ($meta_desc == '') $meta_desc = TreTodayCommon::getShortContent(strip_tags($model->detail), 150);
        if ($meta_desc == '') $meta_desc = Yii::app()->params['meta_description'];
        #region SEO
        Yii::app()->clientScript->registerLinkTag('canonical', null, TreTodayCommon::getCurrentUrl());
        Yii::app()->clientScript->registerMetaTag($meta_desc, 'description');
        Yii::app()->clientScript->registerMetaTag(Yii::app()->params['meta_keywords'], 'keywords');
        $this->pageTitle = 'Rao vặt hot | Chỉnh sửa ' . $model->product_name;
        #endregion SEO

        $this->render('up', array(
            'model' => $model,
            'categories' => $categories,
            'methods' => $methods,
            'locations' => $locations,
            'user_id' => Yii::app()->user->id
        ));
    }

    public function actionActive() {
        if (!isset($_GET['code'])) throw new CDbException (999, 'Invalid request');
        $product = Product::model()->findByAttributes(array('activation_code' => $_GET['code']));

        if ($product == null) $this->redirect(TreTodayUrl::home());
        $product->status = 1;
        $product->activation_code = '';
        $product->save();
        Yii::app()->user->setFlash('success', "Bạn đã kích hoạt sản phẩm thành công.");

        #region SEO
        $meta_desc = TreTodayCommon::getShortContent(strip_tags($product->detail), 150);
        Yii::app()->clientScript->registerLinkTag('canonical', null, TreTodayCommon::getCurrentUrl());
        Yii::app()->clientScript->registerMetaTag($meta_desc, 'description');
        Yii::app()->clientScript->registerMetaTag(Yii::app()->params['meta_keywords'], 'keywords');
        $this->pageTitle = 'Rao vặt hot | Kịch hoạt ' . $product->product_name;
        #endregion SEO

        $this->redirect(TreTodayUrl::getProductUrl($product->product_id, $product->product_name));

    }

    private function sendEmail($product) {
        $sender = UserBack::model()->findByPk($product->user_id);
        if ($sender != null) {
            $content = '<table width="90%" cellspacing="2" cellpadding="2" border="0" align="center">';
            $content .= '<tbody>';
            $content .= '<tr>';
            $content .= '<td align="center"><strong>Kích hoạt sản phẩm của bạn</strong></td>';
            $content .= '</tr>';
            $content .= '<tr>';
            $content .= '<td>Tên sản phẩm : ' . $product->product_name . '</td>';
            $content .= '</tr>';
            $content .= '<tr>';
            $content .= '<td>Click vào <a href="' . TreTodayUrl::getActiveProduct($product->activation_code) . '">đây</a> để kích hoạt</td>';
            $content .= '</tr>';
            $content .= '<tr>';
            $content .= '<td>Website : <a href="' . TreTodayUrl::home() . '">' . TreTodayUrl::home() . '</a></td>';
            $content .= '</tr>';
            $content .= '</tbody>';
            $content .= '</table>';

            $smtp = Yii::app()->params['mailer'];
            Yii::app()->mailer->Host = $smtp['host'];
            Yii::app()->mailer->IsSMTP();
            Yii::app()->mailer->SMTPAuth = true;
            Yii::app()->mailer->CharSet = 'UTF-8';
            Yii::app()->mailer->From = $smtp['email'];
            Yii::app()->mailer->Port = $smtp['port'];
            Yii::app()->mailer->Username = $smtp['user'];
            Yii::app()->mailer->Password = $smtp['pass'];
            Yii::app()->mailer->FromName = $smtp['name'];
            Mailer::sendEmail($sender->email, 'Kích hoạt sản phẩm của bạn', $content);

        }

    }

    public function actionLatest() {
        Yii::app()->language = 'vi';
        $location_id = isset($_GET['location']) ? $_GET['location'] : 0;
        $model = Product::model()->getLatestForGrid($location_id);
        $arr_location = TreTodayCommon::getArrayCityOfVietNam();

        $location = '';
        if ($location_id > 0) {
            $location = $arr_location[$location_id];
        }
        #region SEO
        if (isset($_GET['Product_page'])) {
            Yii::app()->clientScript->registerMetaTag('Rao vặt hot, những tin rao vặt mới nhất, hấp dẫn nhất', 'description');
            Yii::app()->clientScript->registerMetaTag(Yii::app()->params['meta_keywords'], 'keywords');
            $this->pageTitle = 'Rao vặt hot | Rao vặt mới nhất | Trang ' . $_GET['Product_page'];
        } else {
            Yii::app()->clientScript->registerMetaTag('Rao vặt hot, những tin rao vặt mới nhất, hấp dẫn nhất', 'description');
            Yii::app()->clientScript->registerMetaTag(Yii::app()->params['meta_keywords'], 'keywords');
            $this->pageTitle = 'Rao vặt hot | Rao vặt mới nhất';
        }
        Yii::app()->clientScript->registerLinkTag('canonical', null, TreTodayCommon::getCurrentUrl());

        #endregion SEO

        $this->render('latest', array('model' => $model, 'location' => $location));
    }

}